package br.com.esporte.view.site.component.time;

import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.Model;

import br.com.esporte.model.Advertencia;
import br.com.esporte.model.Jogador;
import br.com.esporte.model.TipoAdvertenciaEnum;
import br.com.esporte.view.infra.generic.PaginaModalComponent;
import br.com.esporte.view.infra.html.HtmlParam;
import br.com.esporte.view.site.component.cartao.CartaoComponent;
import br.com.esporte.view.site.component.tipoEsporte.TipoEsporteAbstract;

/**
 * 
 * @author Milton Domingues
 *
 */
public class TimeComponent extends TipoEsporteAbstract {

	private static final long serialVersionUID = -8291240243129649989L;

	private static final String JOGADORES_ID = "jogadores";
	private static final String LINK_JOGADOR_ID = "linkJogador";
	private static final String PARTICIPANTE = "participante";
	private static final String TIME_ID = "time";

	public static final String AMARELO_ID_1 = "amarelo1";
	public static final String AMARELO_ID_2 = "amarelo2";
	public static final String AZUL_ID_1 = "azul1";
	public static final String AZUL_ID_2 = "azul2";
	public static final String VERMELHO_ID = "vermelho";
	public static final String PONTOS_ID = "pontos";

	public static final String COLOR_YELLOW = "yellow";
	public static final String COLOR_BLUE = "blue";
	public static final String COLOR_RED = "red";

	private String color;

	private List<Jogador> jogadores;

	private PaginaModalComponent paginaModal;

	public TimeComponent(String id, PaginaModalComponent paginaModal, List<Jogador> jogadores, String color) {
		super(id);
		setOutputMarkupId(true);
		setJogadores(jogadores);
		setPaginaModal(paginaModal);
		this.color = color;
		montarComponente();
	}

	public void atualizarTime(AjaxRequestTarget target){
		WebMarkupContainer time = (WebMarkupContainer) get(TIME_ID);
		/*getJogadores().clear();
		getJogadores().addAll(jogadores);*/
		target.add(time);
	}

	private CartaoComponent criarCartao(String idCartao, TipoAdvertenciaEnum tipo, List<Advertencia> list, int qtdTrue){
		boolean advertido = qtdCartaoAdvertertido(list, tipo, qtdTrue);
		CartaoComponent cartao = new CartaoComponent(idCartao, tipo, advertido);
		return cartao;
	}

	private ListView<Jogador> criarJogadores(List<Jogador> lista){
		ListView<Jogador> jogadores = new ListView<Jogador>(JOGADORES_ID, lista) {

			private static final long serialVersionUID = 8817728411731672062L;

			@Override
			protected void populateItem(final ListItem<Jogador> item) {
				Jogador jogador = item.getModelObject();
				AjaxLink<Jogador> link = new AjaxLink<Jogador>(LINK_JOGADOR_ID, new Model<Jogador>(jogador)) {

					private static final long serialVersionUID = 3409125214050943674L;

					@Override
					public void onClick(AjaxRequestTarget target) {
						getPaginaModal().acaoModal(getModelObject(), target, TimeComponent.this);
					}
				};
				String nome = jogador.getUsuario() != null ? jogador.getUsuario().getNome() : "JOGADOR";
				link.add(new Label(PARTICIPANTE, nome));

				item.add(link);

				item.add(criarCartao(AMARELO_ID_1, TipoAdvertenciaEnum.AMARELO, jogador.getAdvertencias(), 1));
				item.add(criarCartao(AMARELO_ID_2, TipoAdvertenciaEnum.AMARELO, jogador.getAdvertencias(), 2));
				item.add(criarCartao(AZUL_ID_1, TipoAdvertenciaEnum.AZUL, jogador.getAdvertencias(), 1));
				item.add(criarCartao(AZUL_ID_2, TipoAdvertenciaEnum.AZUL, jogador.getAdvertencias(), 2));
				item.add(criarCartao(VERMELHO_ID, TipoAdvertenciaEnum.VERMELHO, jogador.getAdvertencias(), 1));
				Integer pontos = jogador.getPonto();
				item.add(new Label(PONTOS_ID, new Model<Integer>(pontos != null ? pontos : 0)));
			}
		};

		return jogadores;
	}

	private WebMarkupContainer criarTime(){
		WebMarkupContainer time = new WebMarkupContainer(TIME_ID);
		time.setOutputMarkupId(true);
		time.add(new AttributeAppender(HtmlParam.STYLE, new Model<String>(getStyleColor()), " "));
		return time;
	}

	public String getColor() {
		return color;
	}

	public List<Jogador> getJogadores() {
		return jogadores;
	}

	public PaginaModalComponent getPaginaModal() {
		return paginaModal;
	}

	private String getStyleColor(){
		StringBuilder style = new StringBuilder();
		style.append("color:");
		style.append(getColor());
		return style.toString();
	}

	@Override
	public void montarComponente() {
		WebMarkupContainer time = criarTime();
		time.add(criarJogadores(getJogadores()));
		add(time);
	}

	private boolean qtdCartaoAdvertertido(List<Advertencia> list, TipoAdvertenciaEnum tipo, int qtdTrue){
		int qtd = 0;
		for (Advertencia advertencia : list) {
			if(advertencia.getTipoAdvertencia().equals(tipo)){
				qtd ++;
			}
		}
		if(qtd >= qtdTrue){
			return true;
		}
		return false;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public void setJogadores(List<Jogador> jogadores) {
		this.jogadores = jogadores;
	}

	public void setPaginaModal(PaginaModalComponent paginaModal) {
		this.paginaModal = paginaModal;
	}

}
